package main
import(
	"fmt"
)

/*
2) 请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} 
，输入一个数看看该数组是否存 在此数，并且求出下标，
如果没有就提示"没有这个数"。【会使用到递归】
*/

func main(){
	arr :=[6]int{1,8,10,88,100,1234}

	BinaryFind(&arr,0,len(arr)-1,-6)
}


/*
二分查找的思路:比如我们要查找的数是findval1.arr是一个有序数组,并且是从小到大排序
2.2如果arr[middle]<findval,就应该向middel+1---- rightlndex
2.3如果arr[middle] ==findval，就找到
2.4上面的2.1 2.2 2.3的逻辑会递归执行
3.想一下，怎么样的情况下，就说明找不到[分析出退出递归的条件!!]
if leftlndex >rightlndex{
	// 找不到
	return ...
}
*/

func BinaryFind(arr *[6]int,leftlndex int,rightlndex int,findval int){
	
	// 判断leftIndex 是否大于rightIndex 
	if leftlndex > rightlndex {
		fmt.Println("找不到")
		return
	}

	// 先找到中间的下标

	middle := (leftlndex+rightlndex)/2
	if(*arr)[middle] <findval{
		// 说明我们要查找的数，应该在 middle + 1 -- rightIndex
		BinaryFind(arr,middle+1,rightlndex,findval)
	}else if (*arr)[middle] > findval{
		BinaryFind(arr,leftlndex,middle-1,findval)
	}else{
		fmt.Println("找到了 index =",middle)
	}
}


